/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.reporte.accion;

import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;
import javax.persistence.EntityManager;
import org.primefaces.event.SelectEvent;
import org.reporte.control.AbstractFacade;
import org.reporte.modelo.Conexion;
import org.reporte.modelo.DatoConexion;
import org.reporte.modelo.ParametroConexion;
import org.reporte.modelo.TipoConexion;
import org.reporte.utils.JsfAyuda;


/**
 *
 * @author 43579648
 */


@ManagedBean
@ViewScoped
public class ConexionReporteManejador extends AbstractFacade<Conexion>{

    private List<Conexion> listaConexiones;
    //private List<DatoConexion> listaDatosConexion;
    private TipoConexion tipoConexionSeleccionado;
    private DatoConexion datoConexionSeleccionado;
    private boolean nuevaEntidad;

    @ManagedProperty(value="#{cacheCorrelativoIdentificador}")
    private CacheCorrelativoIdentificador cacheCorrelativoIdentificador;
    


    /** Creates a new instance of ConexionReporteManejador */
    public ConexionReporteManejador() {
        super(Conexion.class);
    }

    @Override
    protected EntityManager getEntityManager() {
        return org.reporte.control.Conexion.getEntityManager();
    }


    public void guardarEntidad(){
        try{
            if(isNuevaEntidad()){
                this.getEntity().setIdConexion(getCacheCorrelativoIdentificador().getIdConexion());
                this.create();
            }else{
                this.edit();
            }
            JsfAyuda.lanzarMensajeInfo(this.getEntity().getClass().getSimpleName() + " "+JsfAyuda.getPropertyValue("managedBeanGuardadoExitosamente"));
        }catch(Exception e){
            e.printStackTrace();
            JsfAyuda.lanzarMensajeError(JsfAyuda.getPropertyValue("managedBeanErrorGuardar") +  " - " + e.getMessage());
        }
    }


    public void eliminarEntidad(){
        try{
            this.remove();
            JsfAyuda.lanzarMensajeInfo(this.getEntity().getClass().getSimpleName() + " "+JsfAyuda.getPropertyValue("managedBeanEliminadoExitosamente"));
        }catch(Exception e){
            JsfAyuda.lanzarMensajeError(JsfAyuda.getPropertyValue("managedBeanErrorEliminar")+ " - " + e.getMessage());
        }
    }

    public void instanciaNuevaEntidad(){
        this.setEntity(new Conexion());
        this.getEntity().setDatoConexionList(new ArrayList<DatoConexion>());
        this.setNuevaEntidad(true);
        this.setTipoConexionSeleccionado(new TipoConexion(1));
    }

    public void actualizarDatos(){
        setListaConexiones(this.findAll());
    }

    public void cerrarDialogoParametro(){
        
        setNuevaEntidad(false);
    }


    public void agregarDatoConexion() throws Exception{
        //getListaDatosConexion().add(new DatoConexion());
        setDatoConexionSeleccionado(new DatoConexion());
    }


    public void removerDatoConexion() throws Exception{
      getEntity().getDatoConexionList().remove(getDatoConexionSeleccionado());
    }


    public void guardarDatoConexion() throws Exception{
        getDatoConexionSeleccionado().setIdDatoConexionReporte(getCacheCorrelativoIdentificador().getIdDatoConexion());
        getEntity().getDatoConexionList().add(getDatoConexionSeleccionado());
    }

    
    private void recargarConexiones(){
        setListaConexiones(findAll());
    }

    public List<SelectItem> comboParametroSeleccion(){
        List<SelectItem> combo = new ArrayList<SelectItem>();
        if(getTipoConexionSeleccionado()==null)
            return null;
        for(ParametroConexion p:getTipoConexionSeleccionado().getParametroConexionList()){
            combo.add(new SelectItem(p, p.getNombre()));
        }
        return combo;
    }

    public List<Conexion> getListaConexiones() {
        if(listaConexiones==null || listaConexiones.isEmpty())
            recargarConexiones();
        return listaConexiones;
    }

    public void setListaConexiones(List<Conexion> listaConexiones) {
        this.listaConexiones = listaConexiones;
    }

    public DatoConexion getDatoConexionSeleccionado() {
        return datoConexionSeleccionado;
    }

    public void setDatoConexionSeleccionado(DatoConexion datoConexionSeleccionado) {
        this.datoConexionSeleccionado = datoConexionSeleccionado;
    }

    public TipoConexion getTipoConexionSeleccionado() {
        return tipoConexionSeleccionado;
    }

    public void setTipoConexionSeleccionado(TipoConexion tipoConexionSeleccionado) {
        this.tipoConexionSeleccionado = tipoConexionSeleccionado;
    }

    public boolean isNuevaEntidad() {
        System.out.println("Valor de nueva entidad: " + nuevaEntidad);
        return nuevaEntidad;
    }

    public void setNuevaEntidad(boolean nuevaEntidad) {
        this.nuevaEntidad = nuevaEntidad;
    }

    public CacheCorrelativoIdentificador getCacheCorrelativoIdentificador() {
        return cacheCorrelativoIdentificador;
    }

    public void setCacheCorrelativoIdentificador(CacheCorrelativoIdentificador cacheCorrelativoIdentificador) {
        this.cacheCorrelativoIdentificador = cacheCorrelativoIdentificador;
    }
    
    
  
    
}
